﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using CapaDeDominio;

namespace CapaDeDatos.EF
{
    public class UsuarioDAO : IUsuarioDAO
    {
       #region IBaseDAO<Usuario,int> Members

        /// <summary>
        /// Crear Usuario para el cliente o administrador
        /// </summary>
        /// <param name="UsuarioACrear">Usuario Cliente</param>
        /// <returns>Dominio Usuario</returns>
        public Usuario Crear(Usuario UsuarioACrear)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                int? codigo = db.Usuarios.Select(l => (int?)l.Codigo).Max();
                UsuarioACrear.Codigo = (codigo ?? 0) + 1;
                db.Usuarios.Add(UsuarioACrear);
                db.SaveChanges();
            }
            return Obtener(UsuarioACrear.Codigo);
        }

        /// <summary>
        /// Obtener Usuario
        /// </summary>
        /// <param name="Codigo">Codigo del Usuario</param>
        /// <returns></returns>
        public Usuario Obtener(int Codigo)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var usuario = from l in db.Usuarios
                            where l.Codigo == Codigo
                            select l;
                return usuario.SingleOrDefault();
            }
        }

        public void Eliminar(Usuario itemEliminar)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                Usuario usuario = db.Usuarios.Single(i => i.Codigo == itemEliminar.Codigo);
                db.Usuarios.Remove(usuario);
                db.SaveChanges();
            }
        }

        /// <summary>
        /// valida el usuario y la contraseña ingresada para realizar la reserva
        /// </summary>
        /// <param name="correo"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public Usuario VerificarCorreoContrasena(String correo, String password)
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var resultado = from l in db.Usuarios
                                where l.User == correo
                                where l.Clave == password
                                select l;


                return resultado.SingleOrDefault();
            }
        }

        public ICollection<Usuario> ListarTodos()
        {
            using (EFContext db = new EFContext(ConexionUtil.ObtenerCadena()))
            {
                var usuario = from l in db.Usuarios
                              select l;
                return usuario.ToList();
            }
        }

        #endregion
    }
}